home *** CD-ROM | disk | FTP | other *** search
- #! /usr/bin/python
-
- """
- A command-line interface to the xmlproc parser. It continues parsing
- even after fatal errors, in order to be find more errors, since this
- does not mean feeding data to the application after a fatal error
- (which would be in violation of the spec).
- """
-
- usage=\
- """
- Usage:
-
- xpcmd.py [options] [urltodoc]
-
- ---Options:
- -l language: ISO 3166 language code for language to use in error messages
- -o format: Format to output parsed XML. 'e': ESIS, 'x': canonical XML
- and 'n': normalized XML. No data will be output if this
- option is not specified.
- urltodoc: URL to the document to parse. (You can use plain file names
- as well.) Can be omitted if a catalog is specified and contains
- a DOCUMENT entry.
- -n: Report qualified names as 'URI name'. (Namespace processing.)
- --nowarn: Don't write warnings to console.
- --entstck: Show entity stack on errors.
- --extsub: Read the external subset of documents.
- """
-
- # --- INITIALIZATION
-
- import sys,getopt
- from xml.parsers.xmlproc import xmlproc, _outputters
-
- # --- Interpreting options
-
- try:
- (options,sysids)=getopt.getopt(sys.argv[1:],"l:o:n",
- ["nowarn","entstck","rawxml","extsub"])
- except getopt.error,e:
- print "Usage error: "+e.msg
- print usage
- sys.exit(1)
-
- pf=None
- namespaces=0
- app=xmlproc.Application()
- warnings=1
- entstack=0
- rawxml=0
- extsub=0
-
- p=xmlproc.XMLProcessor()
-
- for option in options:
- if option[0]=="-l":
- try:
- p.set_error_language(option[1])
- except KeyError:
- print "Error language '%s' not available" % option[1]
- elif option[0]=="-o":
- if option[1]=="e" or option[1]=="E":
- app=_outputters.ESISDocHandler()
- elif option[1]=="x" or option[1]=="X":
- app=_outputters.Canonizer()
- elif option[1]=="n" or option[1]=="N":
- app=_outputters.DocGenerator()
- else:
- print "Error: Unknown output format "+option[1]
- print usage
- elif option[0]=="-n":
- namespaces=1
- elif option[0]=="--nowarn":
- warnings=0
- elif option[0]=="--entstck":
- entstack=1
- elif option[0]=="--rawxml":
- rawxml=1
- elif option[0]=="--extsub":
- extsub=1
-
- # Acting on option settings
-
- err=_outputters.MyErrorHandler(p, p, warnings, entstack, rawxml)
- p.set_error_handler(err)
-
- if namespaces:
- from xml.parsers.xmlproc import namespace
-
- nsf=namespace.NamespaceFilter(p)
- nsf.set_application(app)
- p.set_application(nsf)
- else:
- p.set_application(app)
-
- if len(sysids)==0:
- print "You must specify a file to parse"
- print usage
- sys.exit(1)
-
- if extsub:
- p.set_read_external_subset(extsub)
-
- # --- Starting parse
-
- print "xmlproc version %s" % xmlproc.version
-
- for sysid in sysids:
- print
- print "Parsing '%s'" % sysid
- p.set_data_after_wf_error(0)
- p.parse_resource(sysid)
- print "Parse complete, %d error(s)" % err.errors,
-
- if warnings:
- print "and %d warning(s)" % err.warnings
- else:
- print
-
- err.reset()
- p.reset()
-